const puppeteer = require('puppeteer')

const url = `https://movie.douban.com/tag/#/?sort=T&range=0,10&tags=`

// 传入 time， 是一个箭头函数，使用 new Promise ,实现一个 Promise 的定时函数
const sleep = time => new Promise(resolve => {
	setTimeout(resolve, time)
})

// 自动执行的function，而且还是异步函数
;(async () => {
	console.log('Start visit the target page')

	const browser = await puppeteer.launch({
		args: ['--no-sandbox'], // 非杀伤模式
		dumpio: false
	})

	const page = await browser.newPage()
	await page.goto(url, {
		waitUntil: 'networkidle2'  // 当网络空前的时候，说明网络已经加载完毕
	})

	// 增加一个延时，确保页面加载完毕
	await sleep(3000)

	await page.waitForSelector('.more')

	// 练习阶段，默认只爬取两页，当前页和点击加载更多的那页面
	for (let i = 0; i < 1; i++){
		await sleep(3000)
		await page.click('.more')
	}

	// 获取网页内容
	const result = await page.evaluate(() => {
		// 在页面上要执行的脚本
		var $ = window.$	// 因为在浏览器执行，这样操作比较保险
		var items = $('.list-wp a')
		var links = []


		if(items.length >= 1){
			items.each((index, item) => {
				let it = $(item)
				let doubanId = it.find('div').data('id')
				let title = it.find('.title').text()
				let rate = Number(it.find('.rate').text())
				let poster = it.find('img').attr('src').replace('s_ratio', 'l_ratio')

				links.push({
					doubanId,
					title,
					rate,
					poster
				})
			})	// 理论浏览器是支持箭头函数的
		}

		return links
	})

	browser.close()	// 关闭浏览器

	// console.log(result)

	process.send({result})	// 将结果发送出去
	process.exit(0)	//退出

})()  //后面加上执行的 ()